#!/bin/bash

#
# @date:2021-10-10
# @author:deep as the sea
# @orgnization:doitedu
# @desc:日新表计算脚本
#

# 日新表
# 本表的新用户的定义：
#  新的guid就是新用户
#   -- 新设备,老账号   --> 老guid  --> 老用户
#   -- 新设备,新账号   --> 新guid  --> 新用户
#   -- 新设备,无账号   --> 新guid  --> 新用户
#  
#   -- 老设备,新账号   --> 新guid  --> 新用户
#   -- 老设备,老账号   --> 老guid  --> 老用户
#   -- 老设备,无账号   --> 老guid  --> 老用户
# 
# 

#  CREATE TABLE dws.mall_app_dnu(
#     guid          bigint
#  )
#  PARTITIONED BY (dt string)
#  STORED AS ORC
#  TBLPROPERTIES('orc.compress'='snappy')
#  ;

export HIVE_HOME=/opt/apps/hive-3.1.2

DT=$(date -d'-1 day' +%Y-%m-%d)

if [ $1 ];then
echo "运行脚本，传入了指定的日期，将导指定日期的数据"
DT=$1
fi

DT_PRE=$(date -d"${dt} -1day" +%Y-%m-%d)

master=local
if [ $2 ];then
  master=$2
  echo "任务运行模式： $master "
fi

# 获取用户注册信息表T-1日的最大USER_ID
MAX_USER_ID=`hive -e "select max(user_id) from dim.user_info where dt='$DT_PRE'"`
echo "T-1日 user_info 表，最大id为： ${MAX_USER_ID}"
# 获取空设备guid映射表的最大GUID
MAX_DEV_ID=`hive -e "select max(guid) from dim.dev_guid_map where dt='$DT_PRE'"`
echo "T-1日 空设备guid映射表 表，最大id为： ${MAX_DEV_ID}"

# 从T日的日活表中过滤出新的guid作为今天的日新记录
hive -e "
SET mapreduce.framework.name=${master};
INSERT INTO TABLE dws.mall_app_dnu PARTITION(dt='$DT')
SELECT
  guid
FROM dws.mall_app_dau 
WHERE dt='$DT'  -- 取到当天的活跃用户
AND ((guid>$MAX_USER_ID AND guid<5000000000)  OR  guid>$MAX_DEV_ID)
"

